package com.wtf.dsp.admin.core.model;

import cn.hutool.crypto.digest.DigestUtil;
import com.baomidou.mybatisplus.annotation.DbType;
import lombok.Data;
import lombok.ToString;
import org.springframework.util.DigestUtils;

/**
 * ClassName: DsInfo
 * Description: 数据源的数据库信息
 * date: 2024/3/13 15:34
 *
 * @author linhuanyou
 * @version 1.0
 */
@Data
@ToString
public class DataSourceInfo {
    /**
     * 命名空间
     */
    private String ns;
    /**
     * 数据源
     */
    private String ds;
    /**
     * 数据库类型
     */
    private DbType dbType;
    /**
     * 主机
     */
    private String host;
    /**
     * 端口
     */
    private Integer port;
    /**
     * 账号
     */
    private String username;
    /**
     * 密码
     */
    private String password;
    /**
     * 数据库名称
     */
    private String dbName;
    /**
     * 客户端创建数据库连接等待超时时间，超时则抛出异常，默认30秒
     */
    private Long connectionTimeout;
    /**
     * 测试连接是否空闲的间隔时间，默认5秒
     */
    private Long validationTimeout;
    /**
     * 连接允许最长（空闲时间），超过该值则被强制断开（关闭），默认600000（10分钟）
     */
    private Long idleTimeout;
    /**
     * 检测连接泄露的阈值，超过该时间则日志警告，默认为0（禁用）[连接被占用的超时时间，超过1分钟客户端没有释放连接则强制回收该连接，防止泄露]
     */
    private Long leakDetectionThreshold;
    /**
     * 连接最长生命周期时间，当连接存活时间超过设置值之后会被关闭退休处理，默认1800000（30分钟）
     */
    private Long maxLifetime;
    /**
     * 连接池最大连接数量，默认10g个
     */
    private Integer maxPoolSize;
    /**
     * 连接池最小空闲连接数量，默认10个
     */
    private Integer minIdle;
    /**
     * 连接测试查询语句
     */
    private String connectionTestQuery;

    public String md5() {
        return DigestUtil.md5Hex("DataSourceInfo{" +
                "ns='" + ns + '\'' +
                ", dbType=" + dbType +
                ", ds='" + ds + '\'' +
                ", host='" + host + '\'' +
                ", port=" + port +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", dbName='" + dbName + '\'' +
                ", connectionTimeout=" + connectionTimeout +
                ", validationTimeout=" + validationTimeout +
                ", idleTimeout=" + idleTimeout +
                ", leakDetectionThreshold=" + leakDetectionThreshold +
                ", maxLifetime=" + maxLifetime +
                ", maxPoolSize=" + maxPoolSize +
                ", minIdle=" + minIdle +
                ", connectionTestQuery='" + connectionTestQuery + '\'' +
                '}');
    }
}
